package com.lframework.xingyun.basedata.bo.productspu;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.lframework.starter.web.common.utils.ApplicationUtil;
import com.lframework.xingyun.basedata.entity.ProductBrand;
import com.lframework.xingyun.basedata.entity.ProductCategory;
import com.lframework.xingyun.basedata.entity.ProductSpu;
import com.lframework.starter.web.bo.BaseBo;
import java.math.BigDecimal;
import com.lframework.starter.common.constants.StringPool;
import java.time.LocalDateTime;

import com.lframework.xingyun.basedata.service.product.ProductBrandService;
import com.lframework.xingyun.basedata.service.product.ProductCategoryService;
import io.swagger.annotations.ApiModelProperty;
import com.lframework.starter.web.components.validation.TypeMismatch;

import lombok.Data;

/**
 * <p>
 * 商品SPU GetBo
 * </p>
 *
 * @author zhuchi
 */
@Data
public class GetProductSpuBo extends BaseBo<ProductSpu> {

    /**
     * ID
     */
    @ApiModelProperty("ID")
    private String id;

    /**
     * SPU编号
     */
    @ApiModelProperty("SPU编号")
    private String code;

    /**
     * 商品名称
     */
    @ApiModelProperty("商品名称")
    private String name;

    /**
     * 商品简称
     */
    @ApiModelProperty("商品简称")
    private String shortName;

    /**
     * 类目ID
     */
    @ApiModelProperty("类目ID")
    private String categoryId;

    /**
     * 类目名称
     */
    @ApiModelProperty("类目名称")
    private String categoryName;

    /**
     * 品牌ID
     */
    @ApiModelProperty("品牌ID")
    private String brandId;

    /**
     * 品牌名称
     */
    @ApiModelProperty("品牌名称")
    private String brandName;

    /**
     * 商品类型
     */
    @ApiModelProperty("商品类型")
    private Integer productType;

    /**
     * 规格
     */
    @ApiModelProperty("规格")
    private String spec;

    /**
     * 重量（kg）
     */
    @ApiModelProperty("重量（kg）")
    private BigDecimal weight;

    /**
     * 体积（cm3）
     */
    @ApiModelProperty("体积（cm3）")
    private BigDecimal volume;

    /**
     * 状态
     */
    @ApiModelProperty("状态")
    private Boolean available;

    /**
     * 创建人
     */
    @ApiModelProperty("创建人")
    private String createBy;

    /**
     * 创建人ID
     */
    @ApiModelProperty("创建人ID")
    private String createById;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN)
    private LocalDateTime createTime;

    /**
     * 修改人
     */
    @ApiModelProperty("修改人")
    private String updateBy;

    /**
     * 修改人ID
     */
    @ApiModelProperty("修改人ID")
    private String updateById;

    /**
     * 修改时间
     */
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN)
    private LocalDateTime updateTime;

    public GetProductSpuBo() {

    }

    public GetProductSpuBo(ProductSpu dto) {

        super(dto);
    }

    @Override
    public BaseBo<ProductSpu> convert(ProductSpu dto) {
        return super.convert(dto);
    }

    @Override
    protected void afterInit(ProductSpu dto) {
        ProductCategoryService productCategoryService = ApplicationUtil.getBean(
                ProductCategoryService.class);
        ProductCategory productCategory = productCategoryService.findById(dto.getCategoryId());
        this.categoryName = productCategory.getName();

        ProductBrandService productBrandService = ApplicationUtil.getBean(ProductBrandService.class);
        ProductBrand productBrand = productBrandService.findById(dto.getBrandId());
        this.brandName = productBrand.getName();
    }
}
